//package com.base.controller;
//
//import java.math.BigDecimal;
//import java.text.SimpleDateFormat;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import javax.servlet.http.HttpServletRequest;
//
//import com.base.po.param.NetState;
//import com.base.po.voip.*;
//import com.base.service.*;
//import com.base.utils.Produce;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Controller;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RequestMethod;
//import org.springframework.web.bind.annotation.ResponseBody;
//import org.springframework.web.servlet.ModelAndView;
//import CommContent;
//import com.base.helper.VosHelper;
//import com.base.po.param.VosModelList;
//import com.base.po.result.SignInResult;
//import com.base.utils.GsonUtil;
//import com.base.utils.IP;
//
///**
// * 签到任务客户端
// *
// * @author f
// */
//@Controller
//@RequestMapping("/admin")
//public class wap_week {
//
//    @Autowired
//    private LogsService logsService;// log日志
//    @Autowired
//    private WeeksService weeksService; // 签到信息
//    @Autowired
//    private SubscribersService subscribersService; // 用户信息
//    @Autowired
//    private UsersService usersService; // 代理商信息
//    @Autowired
//    private TaskRewardService taskRewardService; // 完成任务信息
//    @Autowired
//    private TaskReachService taskReachService; // 任务领取信息
//    @Autowired
//    private TaskListService taskListService; // 任务类型列表
//    @Autowired
//    private ChangeRecordService changeRecordService;
//
//    /**
//     * 签到任务信息列表 主页
//     *
//     * @param subid 当前用户ID
//     * @return ModelAndView
//     * @throws Exception
//     */
//    @RequestMapping(value = "/weeksApp")
//    public ModelAndView weekApp(String subid) throws Exception {
//        Map<String, Object> map = new HashMap<String, Object>(); // 返回数据对象
//        Subscribers sub = subscribersService.selectByPrimaryKey(subid); // 用户信息
//        Boolean isShunTong=false;
//        // 用户信息不存在 则进入主页失败 返回数据不存在
//        if (sub == null || sub.getDatastatus() == false)
//            return new ModelAndView("jsp/datanotfound");
//        if (sub.getParentid()!="d093179851af43dfbb1bc6639334b109"){//顺通的parentID
//            isShunTong=true;
//        }
//        /**
//         * 1.获取签到信息
//         */
//        // 计算获取当前星期的签到信息
//        Date day = Parameters.getNowDate(); // 获取当天的日期
//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 转换日期大小
//        int week = Parameters.getSum(day); // 获取计算开始--结束日期
//        Date dayStart = Parameters.getSpecifiedDayBefore(day, week); // 获取当前星期的开始日期
//        Date dayEnd = Parameters.getSpecifiedDayAfter(day, 6 - week); // 获取当前星期的结束日期
//        List<String> wlist = Parameters.getFindDates(dayStart, dayEnd); // 获取当前星期的集合
//        List<SignInResult> sign = new ArrayList<SignInResult>(); // 初始化当前星期的签到信息
//        int continuity = 0; // 初始化连续签到的天数 默认0
//        boolean dayWeek = true; // 初始化今天是否签到完成的状态 默认true
//        // 写入签到信息
//        for (String wDate : wlist) {
//            // 今日小于之后的日期
//            if (sdf.parse(sdf.format(day)).before(sdf.parse(wDate))) {
//                sign.add(new SignInResult(wDate.substring(5), false, Parameters.getDateToWeek(wDate))); // 写入未签到数据
//                continue; // 跳过本次循环
//            }
//            // 判断是否存在签到信息
//            if (weeksService.selectByCount(sub.getParentid(), sub.getId(), wDate).getCtweek() > 0) {
//                sign.add(new SignInResult(wDate.substring(5), true, Parameters.getDateToWeek(wDate))); // 写入签到数据
//                continuity++; // 计数+1
//            } else {
//                sign.add(new SignInResult(wDate.substring(5), false, Parameters.getDateToWeek(wDate))); // 写入未签到数据
//                // 今日没有签到信息
//                if (wDate.equals(sdf.format(day)))
//                    dayWeek = false; // 赋值未签到
//                else
//                    continuity = 0; // 今日之前未签到 取消计数
//            }
//        }
//        /**
//         * 2.获取每日任务信息
//         */
//        // 循环更新每日任务
//        for (TaskList t : taskListService.selectByAll(new TaskList(sub.getParentid(), (byte) 1))) {
//            List<TaskReach> tr = taskReachService.selectByTaskReach(sub.getId(), sub.getParentid(), sdf.format(day),
//                    t.getType()); // 获取当前任务信息
//            // 未添加任务
//            if (tr == null || tr.size() < 1) {
//                taskReachService.insertSelective(new TaskReach(t.getId(), subid, day, (byte) 0, 0)); // 新增一条每日任务
//                continue; // 跳过本次循环
//            }
//            // 已领取任务 未完成任务 任务已达标
//            if (tr.size() > 0 && tr.get(0).getReceivestatus() == 1 && tr.get(0).getCompletestatus() == 0 && taskRewardService
//                    .countByType(sub.getParentid(), sub.getId(), sdf.format(day), t.getType()) >= t.getTarget())
//                taskReachService.updateByPrimaryKeySelective(new TaskReach(tr.get(0).getId(), 1)); // 更新状态为已完成
//        }
//        // 每日任务信息
//        List<TaskReach> trList = taskReachService.selectByAll(sub.getId(), sub.getParentid(), sdf.format(day));
//        /**
//         * 3.计算已赠送金额
//         */
//        // 用户签到赠送信息
//        Weeks weeks = weeksService.selectByCount(sub.getParentid(), sub.getId(), null);
//        // 用户任务赠送信息
//        TaskReach taskReach = taskReachService.selectByPresent(sub.getId(), sub.getParentid());
//        /**
//         * 4.跳转传值
//         */
//        map.put("isShunTong", isShunTong); // 每日任务
//        map.put("trList", trList); // 每日任务
//        map.put("trsize", trList.size()); // 是否存在每日任务
//        map.put("callbalance", weeks.getCallbalance().add(taskReach.getTaskList().getPresenttf())); // 已赠送通话金额
//        map.put("shopbalance", weeks.getShopbalance().add(taskReach.getTaskList().getPresentsg())); // 已赠送购物金额
//        map.put("dayWeek", dayWeek); // 今日的签到状态
//        map.put("signList", sign); // 本星期的签到信息
//        map.put("continuity", continuity); // 连续签到的天数
//        map.put("rule", usersService.selectByPrimaryKey(sub.getParentid()).getRule()); // 签到任务页详细规则
//        map.put("subid", sub.getId()); // 用户信息
//        return new ModelAndView("jsp/wap_week", map);
//    }
//
//    /**
//     * 用户进行签到
//     *
//     * @param subid      用户ID
//     * @param continuity 连续签到的天数
//     * @return Map (-1)-未登录 (-2)-当前应用当前已签到 (-3)-签到失败 (0)-签到成功
//     * @throws Exception
//     */
//    @RequestMapping(value = "/addWeeks", method = RequestMethod.POST)
//    public @ResponseBody
//    Map<String, Object> addWeeks(HttpServletRequest request, String subid, Integer continuity)
//            throws Exception {
//        Map<String, Object> map = new HashMap<>(); // 返回数据对象
//        Subscribers sub = subscribersService.selectByPrimaryKey(subid); // 获取用户信息
//        // 用户不存在或被冻结 则签到失败
//        if (sub == null || sub.getDatastatus() == false) {
//            map.put("flag", -1);
//            return map;
//        }
//        Users user = usersService.selectByPrimaryKey(sub.getParentid()); // 获取代理商信息
//        // 当天已签到 则签到失败
//        if (weeksService.selectByCount(sub.getParentid(), sub.getId(),
//                new SimpleDateFormat("yyyy-MM-dd").format(Parameters.getNowDate())).getCtweek() > 0) {
//            map.put("flag", -2);
//            return map;
//        }
//        String result = VosHelper.GetVosAccount("{accounts:['" + user.getAgentprefix() + sub.getMobile() + "']}"); // VOS获取用户信息
//        VosModelList v1 = GsonUtil.getObject(result, VosModelList.class);
//        // 剩余时间
//        int surplusTime = Produce.differentDays(Produce.getNowDate(), new Date(v1.infoCustomers[0].getValidTime()));
//        // TODO 判断账户余额是否过期
//        if (Produce.getNowDate().after(new Date(v1.infoCustomers[0].getValidTime()))) {
//            map.put("flag", -100);
//            return map;
//        }
//        ++continuity; // 计算出的签到天数先+1
//        // 获取当前需要充值的通话金额和购物金额
//        BigDecimal[] setMoney = {user.getWeekcall(), user.getWeekshop()}; // 代理商设置的赠送通话金额和赠送购物金额
//        BigDecimal[] setMultiple = {user.getWeekmucall(), user.getWeekmushop()}; // 代理商设置的连续签到赠送通话倍率和赠送购物倍率
//        BigDecimal[] getMoney = {null, null}; // 初始化实际赠送的通话金额和购物金额
//        // 获取实际赠送的通话金额和购物金额
//        for (int i = 0; i < setMoney.length; i++) {
//            // 若代理商设置的赠送金额为0
//            if (setMoney[i].compareTo(BigDecimal.ZERO) == 0) {
//                getMoney[i] = new BigDecimal(0); // 实际赠送的金额=0
//                continue; // 跳过本次循环
//            }
//            // 判断连续签到赠送话费的倍率是否为0
//            if (setMultiple[i].compareTo(BigDecimal.ZERO) == 0)
//                getMoney[i] = setMoney[i]; // 赠送的金额=代理商设置的赠送金额
//            else
//                getMoney[i] = setMoney[i].multiply(setMultiple[i]).multiply(new BigDecimal(continuity)); // 赠送的金额=代理商设置的赠送金额*代理商设置的连续签到赠送倍率*天数
//        }
//        // 进行签到 签到成功
//        if (weeksService.insertSelective(
//                new Weeks(sub.getParentid(), sub.getId(), Parameters.getNowDate(), getMoney[0], getMoney[1])) > 0) {
//            // 查询变更前话费余额
//            BigDecimal beforeB = new BigDecimal(0);
//            // 备注
//            String remark = null;
//            try {
//                // TODO 暂时配注
//                String userR = VosHelper
//                        .GetVosAccount("{accounts:['" + user.getAgentprefix() + sub.getMobile() + "']}");
//                if (userR != null) {
//                    VosModelList shareUserR1 = GsonUtil.getObject(userR, VosModelList.class);
//                    if (shareUserR1.retCode == 0) {
//                        beforeB = shareUserR1.infoCustomers[0].getMoney();
//                    } else {
//                        beforeB = new BigDecimal(0);
//                        remark = "暂无记录";
//                    }
//                }
//            } catch (Exception e) {
//                beforeB = new BigDecimal(0);
//                remark = "暂无记录";
//            }
//            // 查询变更前话费有效期
//            Date beforeTimeB = sub.getEndtime();
//            // 查询变更话费
//            BigDecimal changeB = new BigDecimal(0);
//            // 查询变更前购物金余额
//            BigDecimal beforeS = BigDecimal.valueOf(sub.getShopBalance());
//            // 查询变更前购物金有效期
//            Date beforeTimeS = new SimpleDateFormat("yyyy-MM-dd")
//                    .parse(sub.getShopEnddate());
//            // 查询变更购物金
//            BigDecimal changeS = new BigDecimal(0);
//
//            StringBuilder judge = new StringBuilder("签到状态：签到成功"); // 记录日志
//            // 充值通话金额
//            String payinfo = VosHelper.PayVosAccount("{\"ownerName\":\"" + user.getAgentprefix() + sub.getMobile()
//                    + "\",\"ownerType\":\"2\",\"money\":\"" + getMoney[0] + "\",\"memo\":\"" + user.getUsername()
//                    + "，用户签到奖励" + getMoney[0] + "元\"}");
//            // 话费有效期
//            String paytime = VosHelper.ModifyVosAccount("{\"account\":\"" + user.getAgentprefix()
//                    + sub.getMobile() + "\",\"feeRateGroup\":\"" + user.getFreeroute()
//                    + "\",\"agentAccount\":\"" + user.getUsername() + "\",\"validTime\":\""
//                    + Produce.plusDay(surplusTime, Produce.getNowDate()).getTime() + "\"}");
//
//            // 充值通话金额失败
//            if (GsonUtil.getObject(payinfo, VosModelList.class).retCode != 0)
//                judge.append("，用户充值通话金额失败");
//            changeB = getMoney[0];
//            // 充值购物金额
//            if (subscribersService.updateByPrimaryKeySelective(
//                    new Subscribers(sub.getId(), sub.getShopBalance() + getMoney[1].intValue())) <= 0)
//                judge.append("，用户充值购物金额失败");
//            changeS = getMoney[1];
//
//            try{
//                // 变更记录 话费购物金有效期不变
//                changeRecordService.insertSelective(new ChangeRecord(sub.getParentid(), sub.getShopid(),
//                        sub.getId(), Produce.getNowDate(), beforeB, changeB, 1, beforeTimeB, beforeTimeB, "签到",
//                        beforeS, changeS, 1, beforeTimeS, beforeTimeS, "签到", remark));
//            }catch (Exception e) {
//                logsService.insert(CommContent.TYPE_CREATE, sub.getMobile() + "签到变更记录异常", user.getUsername(), true,
//                        IP.getIpAddr(request));
//            }
//
//            // 记录日志
//            logsService.insert(CommContent.TYPE_CREATE, judge.toString(), user.getUsername(), true,
//                    IP.getIpAddr(request));
//            String adv = user.getWeekadv(); // 跳转广告
//            // 代理商没有设置跳转广告
//            if (adv == null || adv.isEmpty())
//                adv = "weeksApp?subid=" + sub.getId() + "";
//            map.put("adv", adv);
//            map.put("flag", 0);
//            return map; // 签到成功
//        }
//        map.put("flag", -3);
//        return map; // 签到失败
//    }
//
//    /**
//     * 用户完成任务
//     *
//     * @param subid 用户ID
//     * @param id    任务ID
//     * @return int (-1)-未登录 (-2)-领取奖励失败 (0)-领取奖励成功 (1)-领取任务成功 (2)-未完成任务 (3)-已领取奖励
//     * @throws Exception
//     */
//    @RequestMapping(value = "/updateTasks", method = RequestMethod.POST)
//    public @ResponseBody
//    int updateTasks(HttpServletRequest request, String subid, Integer id) throws Exception {
//        Subscribers sub = subscribersService.selectByPrimaryKey(subid); // 获取用户信息
//        // 用户不存在或被冻结 则完成任务失败
//        if (sub == null || sub.getDatastatus() == false)
//            return -1;
//        TaskReach taskReach = taskReachService.selectByPrimaryKey(id); // 任务信息对象
//        if (taskReach == null)
//            return -1;
//        // 判断用户是否领取任务
//        switch (taskReach.getReceivestatus()) {
//            case 0: // 未领取任务
//                taskReachService.updateByPrimaryKeySelective(new TaskReach(id, (byte) 1)); // 更新状态为已领取
//                return 1;
//            case 1: // 已领取任务
//                // 判断用户是否完成任务
//                switch (taskReach.getCompletestatus()) {
//                    case 0: // 未完成任务
//                        return 2;
//                    case 1: // 已完成任务
//                        Users user = usersService.selectByPrimaryKey(sub.getParentid()); // 获取代理商信息
//
//                        // 查询变更前话费余额
//                        BigDecimal beforeB = new BigDecimal(0);
//                        // 备注
//                        String remark = null;
//                        try {
//                            // TODO 暂时配注
//                            String userR = VosHelper
//                                    .GetVosAccount("{accounts:['" + user.getAgentprefix() + sub.getMobile() + "']}");
//                            if (userR != null) {
//                                VosModelList shareUserR1 = GsonUtil.getObject(userR, VosModelList.class);
//                                if (shareUserR1.retCode == 0) {
//                                    beforeB = shareUserR1.infoCustomers[0].getMoney();
//                                } else {
//                                    beforeB = new BigDecimal(0);
//                                    remark = "暂无记录";
//                                }
//                            }
//                        } catch (Exception e) {
//                            beforeB = new BigDecimal(0);
//                            remark = "暂无记录";
//                        }
//                        // 查询变更前话费有效期
//                        Date beforeTimeB = sub.getEndtime();
//                        // 查询变更话费
//                        BigDecimal changeB = new BigDecimal(0);
//                        // 查询变更前购物金余额
//                        BigDecimal beforeS = BigDecimal.valueOf(sub.getShopBalance());
//                        // 查询变更前购物金有效期
//                        Date beforeTimeS = new SimpleDateFormat("yyyy-MM-dd")
//                                .parse(sub.getShopEnddate());
//                        // 查询变更购物金
//                        BigDecimal changeS = new BigDecimal(0);
//
//                        // TODO 判断账户余额是否过期
//                        String result = VosHelper.GetVosAccount("{accounts:['" + user.getAgentprefix() + sub.getMobile() + "']}"); // VOS获取用户信息
//                        VosModelList v1 = GsonUtil.getObject(result, VosModelList.class);
//                        if (Produce.getNowDate().after(new Date(v1.infoCustomers[0].getValidTime()))) {
//                            return -100;
//                        } else {
//                            // 领取奖励 更新状态
//                            if (taskReachService.updateByPrimaryKeySelective(new TaskReach(id, 2)) <= 0)
//                                break;
//                            TaskList taskList = taskListService.selectByPrimaryKey(taskReach.getTasklistid()); // 获取该任务赠送信息对象
//                            StringBuilder judge = new StringBuilder("任务状态：领取奖励"); // 记录日志
//                            // 充值通话金额
//                            String payinfo = VosHelper.PayVosAccount("{\"ownerName\":\"" + user.getAgentprefix() + sub.getMobile()
//                                    + "\",\"ownerType\":\"2\",\"money\":\"" + taskList.getPresenttf() + "\",\"memo\":\""
//                                    + user.getUsername() + "，用户任务奖励" + taskList.getPresenttf() + "元\"}");
//                            // 充值通话金额失败
//                            if (GsonUtil.getObject(payinfo, VosModelList.class).retCode != 0)
//                                judge.append("，用户充值通话金额失败");
//                            // 变更话费
//                            changeB = taskList.getPresenttf();
//                            // 充值购物金额
//                            if (subscribersService.updateByPrimaryKeySelective(
//                                    new Subscribers(sub.getId(), sub.getShopBalance() + taskList.getPresentsg().intValue())) <= 0)
//                                judge.append("，用户充值购物金额失败");
//                            changeS = taskList.getPresentsg();
//
//                            try{
//                                // 变更记录 话费购物金有效期不变
//                                changeRecordService.insertSelective(new ChangeRecord(sub.getParentid(), sub.getShopid(),
//                                        sub.getId(), Produce.getNowDate(), beforeB, changeB, 1, beforeTimeB, beforeTimeB, "完成任务",
//                                        beforeS, changeS, 1, beforeTimeS, beforeTimeS, "完成任务", remark));
//                            }catch (Exception e) {
//                                logsService.insert(CommContent.TYPE_CREATE, sub.getMobile() + "完成任务变更记录异常", user.getUsername(), true,
//                                        IP.getIpAddr(request));
//                            }
//
//                            return 0;
//                        }
//                    case 2: // 已领取奖励
//                        return 3;
//                }
//        }
//        return -2;
//    }
//}
